import express from "express";
import {authenticateToken, generateToken} from "../../config/auth.js";
import userService from "../../services/user/userService.js";
import ResponseHandler from "../../utils/responseHandler.js";
import functionalTools from "../../utils/functionalTools.js";
import asyncHandler from "../../utils/asyncHandler.js";

const userRouter = express.Router(); // 初始化 Router

/**
 * @description 创建用户
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
userRouter.post('/createUser',
    asyncHandler(async (req, res) => {
        const userData = {
            ...req.body,
            registeredIP: functionalTools.getIpAddress(req) // 获取注册时的 IP 地址
        };

        const errorMessage = await userService.createUser(userData);
        if (errorMessage) return await ResponseHandler.responseResult(res, null, errorMessage); // 返回错误信息

        return await ResponseHandler.responseResult(res, null, '用户创建成功'); // 返回成功信息
    })
);

/**
 * @description 登录用户
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
userRouter.post('/loginUser',
    asyncHandler(async (req, res) => {
        const {username, password} = req.body;
        const ipAddress = functionalTools.getIpAddress(req); // 获取登录时的 IP 地址

        const user = await userService.loginUser(username, password, ipAddress);
        if (typeof user === 'string') return await ResponseHandler.responseResult(res, null, user); // 返回错误信息

        const token = await generateToken(user); // 生成 JWT token
        return await ResponseHandler.responseResult(res, {user, token}, '用户登录成功'); // 返回用户信息和 token
    })
);

/**
 * @description 获取所有用户
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
userRouter.get('/getAllUsers',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const users = await userService.getAllUsers();
        return await ResponseHandler.responseResult(res, users, '获取用户成功'); // 返回用户列表
    })
);

/**
 * @description 更新用户
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
userRouter.post('/updateUser',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const errorMessage = await userService.updateUser(req.user.id, req.body);
        if (errorMessage) return await ResponseHandler.responseResult(res, null, errorMessage); // 返回错误信息

        return await ResponseHandler.responseResult(res, null, '用户更新成功'); // 返回成功信息
    })
);

/**
 * @description 逻辑删除用户
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
userRouter.delete('/deleteUser',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const deletionResult = await userService.deleteUser(req.body);
        if (deletionResult) return await ResponseHandler.responseResult(res, null, '用户删除失败'); // 返回错误信息

        return await ResponseHandler.responseResult(res, null, '用户已逻辑删除'); // 返回成功信息
    })
);

export default userRouter; // 导出用户路由
